查看原文
其他

VR解谜游戏制作经验分享:《I Expect You To Die》

2017-01-14 Unity官方 Unity官方平台

今天为大家分享密室逃脱类型的VR游戏《I Expect You To Die》的开发过程中所遇到的挑战,并详细介绍开发团队如何优化VR沉浸式体验。《I Expect You To Die》游戏曾获得Vision VR/AR Awards 2016的最佳创意(Vision Inspire Award)与最佳游戏(Best Game)两项大奖。另外Vision VR/AR Awards 2017全球大赛即将开启,我们也期待能看到更多像《I Expect You To Die》这样的优秀作品。


操作方式过渡


《I Expect You To Die》(以下简称《IEYTD》)最初的Demo演示与最终版最大的区别就在于操作方式的改变:Demo原先仅支持鼠标操作,后来添加了对Oculus Touch硬件的适配,获得了更为自然的抓取及其它手势操作的模拟。

《IEYTD》的核心思想是玩家通过与VR环境中的物体交互而解决谜题。项目初期,玩家使用鼠标将准星瞄准到物体上,可以对其进行意念控制。这个模式允许玩家与远处的对象进行交互。当操控方式转为双手操作时,我们仍希望保留这个功能,同样也想让玩家获得在VR中抓握物体的美妙体验。因此,最后游戏中有两种手势操作的模式:近距离抓取模式和远程意念控制模式。



近距离抓取模式

使用虚拟手掌抓取物体是一种很奇妙的体验,这个机制对于《IEYTD》游戏来说非常关键。在游戏中,玩家的手显示为虚拟的间谍手套,并由动画来表现不同手势。这个模式下玩家抓取物体时,手会完全虚化。这么做的首要原因就是范围。《IEYTD》中可以抓取的物体有很多,都使用统一的抓取动作并不实际。其次,抓取方式因人而异,还受环境所制约。

 



当玩家的手出现在环境中时,“可抓取”的对象将变为高亮。我们借助触发体以及从玩家头部发出的到手的射线投射来进行预测。触发体用于维护可抓取的候选列表,射线投射用于选定靠近玩家头部的物体。游戏中假设玩家最想交互的是最靠近玩家头部的可交互物体。


意念抓取(TK)模式

TK模式允许玩家与可抓取范围之外的对象进行交互,这就让游戏的谜题设置更为灵活并且可以创造出更多样的环境。它也巩固了“超级间谍”的游戏主题,因为它为玩家的工具装备平添了间谍感。



TK模式的设计目标是将基于鼠标控制的准星交互模式改为基于手的。为了实现这一点,我们为每只手做了一个父准星并指定了正向矢量。之后准星沿着这个方向放置在3D空间中,并朝该关卡的几何碰撞体进行射线投射。这种方法在大多数条件下都适用,当然还是会有一些不理想的情况。

首先准星会持续移动。因为它表示您的手,轻微的手部运动都会导致它移动。在远距离时,移动被放大,显得很滑稽。这时,瞄准远处的对象变得异常困难。为了解决这个问题,我们使用阻尼曲线对原始准星添加了“平滑处理”。应用的平滑量与原始准星位移成反比。结果小位移可以被平滑处理掉,大位移仍会立即发生。


第二个问题是,准星在游戏中的渲染顺序。为了避免遮挡问题并让准星保持2D效果,我们将其渲染在了游戏世界的所有几何体之上。这种方法在准星是头部父节点时很有效,但并不适用于手部。玩家对准星位置的感知会受到严重影响。这个问题在玩家视线上有多个对象在不同景深的位置时尤为明显。对于玩家而言,准星将出现在距离他们最近的对象表面,但实际上是在一个对象表面的不同深度上。这种差异造成了玩家与目标对象交互时的混淆。为了解决这种问题,我们从头部朝准星进行了射线投射,并在路径上检测是否存在可交互的对象。如果检测到可交互对象,就将准星瞄准到该对象。


手的碰撞模型


VR环境下实现“手”的一大挑战是,如何从物理的角度与虚拟世界进行交互。游戏的物理规则只是一种近似,当您将其与虚拟手结合后,它的移动不受几何体的限制,因而就会经常发生些即奇怪又搞笑的事。手部碰撞模型由两部分组成:手部物理和持物物理。

手部物理

在《IEYTD》中,手没有碰撞器,只有抓取物体的触发体。玩家可以将虚拟手伸入几何体中并穿过去。我们曾一度考虑在发生触碰时给予虚拟的反馈,但最终并没有这么做,原因是,这样可能会误导玩家将手伸入几何体中。我们不希望玩家可以将那些近处的对象推远,尤其是那些对于谜题至关重要的锁定对象。


持物物理


判断玩家要抓取的对象的物理行为是一个有趣的问题。我们一开始实现的模式为手持对象与环境碰撞,当碰撞总数超过固定阈值时,物体从玩家手中滑落。最初这个解决方案似乎可行,但当关卡和交互变的复杂之后,交互结果令人沮丧。比如,我们有一堆现金,雪茄和手榴弹布置在狭小的空间内。当玩家抓取到这些物体时,尤其是在高速移动中时,狭小的空间将导致物理系统持续尝试穿透,从而产生严重的物理问题。经常因这种穿透导致碰撞总数超出掉落阈值,使得玩家手中物体无意中掉落。这种体验很不爽,并成为了解决谜题的障碍。



之后我们将解决方案调整为在拾取物体后关闭碰撞检测器。初期的测试效很理想,因为在狭窄空间抓取物体不会出现物理效果失常。但是存在这样一个情况,玩家现在可以将物体贴到几何体里面了,这时如果释放物体,它们会弹到一个无法预测的位置,因为物理系统会试图解决穿透。但在我们的玩家测试中,这并不多见,并且玩家通常不会注意到。

这种方案还有一个问题需要解决,如果关闭了碰撞器,当您拾起物体时,它将不再检测碰撞。因此我们无法再打碎对象了。这一变化影响了游戏的解谜玩法,因为打碎物体是解谜机制的一个核心内容,其次,在进行这种冲动行为时会打破沉浸感。因此我们做了一定调整,在玩家快速移动物体时会短暂开启碰撞器,允许发送和接收碰撞事件。这个解决方案效果很好,而且动作很直观。


最后,在意念抓取模式下则要一直启用碰撞器。经过测试,被意念抓取到的对象在穿过几何体时如果没有任何阻力会非常不自然。并且有很大几率导致在几何体内丢失对象。

声音设置


音效对于好的VR体验来说至关重要。《IEYTD》是解谜游戏,但它也是一个物理沙盒。玩家可以堆叠物体,来回扔它们,打碎它们甚至朝他们射击。因此,这些物体与环境经常发生碰撞,并且发生碰撞时要有适当的音效。



为了实现这种音频交互,我们设计了一个系统来标注环境中的碰撞体是软、硬、玻璃或者金属的表面。上图显示的是轿车关卡中轿车内部的不同表面的着色。声音设计人员为每种类型的表面以及每个可以被玩家抓取的对象创建了两种碰撞声音(普通和重音)。设计思路是根据碰撞的向量调整这两种声音的大小再同时播放这两种声音。最初的测试效果很理想,稍作改动后就可以让系统模拟产生基于表面碰撞的声音。下图是整个系统工作原理的概述。



游戏设计


隐藏区域


正如之前所提及的,《IEYTD》也是一个物理沙盒。玩家在解谜的同时也可以进行有趣的物理实验。我们对这个功能很满意,但这是会产生一个新问题。因为玩家可能会沉浸在物理实验中,反而丢失关键的解谜线索,造成游戏陷入停滞。


我们决定沿用以前游戏的技术来解决这个问题,对隐藏对象使用X射线着色器。起初我们觉得会打破玩家的沉浸感,但玩家扮演的是有意念控制的超级间谍,拥有X射线透视能力似乎也不奇怪。然而,我们又不希望对所有的遮挡物都使用X射线着色器,这样会暴露谜题隐藏的内容。取而代之的是,我们创建了一个系统来定义玩家无法到达的区域:名为Hidden Volumes(隐藏区域)的触发区域。当物体掉落在这个区域后,就会应用X射线着色器,从而允许玩家透视几何体。


接下来需要一种让玩家可以与隐藏区域的物体进行交互的方法。为了实现这个目的,我们将物体放置在了不同的物理层中,可以创建一个特定层的射线投射图进行探测并优选目标。这个解决方案允许玩家可以穿过几何体抓取对象。



盲区


顾名思义,这个区域的唯一目的是降低玩家注意到某个地方的可能性,这些地方可能是某个解谜的关键之处,或者简单地缺少一些几何体。默认情况下,在玩家的头部进入这个触发区域时会将屏幕逐渐变为黑色。在另外一些剧情中,则更适于创建单一的Blind Volume(盲区),在玩家的头部离开该区域时屏幕渐渐变黑。




厢盖


《IEYTD》中的很多隔层都包含玩家可以拾取的物体。为了防止玩家不打开盖子就抓取里面的物体,我们设置了特殊的物理层并添加盖子碰撞检测器。并由玩家头部到手部对该层进行射线投射,使用碰撞检测器检测与射线的碰撞。如果检测到碰撞,推断玩家试图不打开盖子就获取厢内的物体,这时就会禁用抓取功能。




VR的力量


《IEYTD》的开发极具挑战性,让开发团队收获了很多经验。这里介绍的技术是基于无数玩家测试和实践的结果,还包括VR社区共享的知识。VR是一个强而有力的媒体,使得开发者能为玩家带来全新的兴奋体验。也正是VR,让《IEYTD》为玩家们提供成为身手不凡的超级间谍的机会。



《I Expect You To Die》游戏现已上线,支持Oculus及PlayStation® VR平台,您可在 Oculus Store或PlayStation® Store下载体验。后续我们还将为大家分享更多游戏及VR/AR开发相关的经验,请保持关注哦!    


相关阅读

Unity 5.6 Beta版发布

Unity WebGL内存详解:Unity堆

Unity 5.6 Beta版中的光照模式

Unity版本持续发布计划

Unity着色器教程 | 积雪效果


点击“阅读原文”进入Unity官方中文社区!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存